package bss

import "encoding/json"

type OrderReceive struct {
	ConsoleOrderFlowId string            `json:"consoleOrderFlowId"` // 创建订单时控制台传入的订单流水号（前端生成）
	OrderId            string            `json:"orderId"`            // BSS返回的订单号（BSS生成）
	OrderStatus        string            `json:"orderStatus"`        // 订单状态
	StatusTime         string            `json:"statusTime"`         // 状态时间
	Token              string            `json:"token"`              // 用户登录后的token
	OrderRoute         string            `json:"orderRoute"`         // 消息接收路由
	UserId             string            `json:"userId"`             // 用户ID
	SetCount           json.Number       `json:"setCount"`           // 订单中相同配置资源套餐的数量。如订单中购买了2组云服务器套餐，每组的配置都是一样的
	BillType           string            `json:"billType"`           // 计费方式,业务线需要
	OrderType          string            `json:"orderType"`          // 订单用途,业务线需要,新购new 续费renew 更配changeConfigure  转正regular 退订unsubscribe
	ProductList        []*ReceiveProduct `json:"productList"`        // 订单明细流水号的List
}

type ReceiveProduct struct {
	Region          string      `json:"region"`
	AvailableZone   string      `json:"availableZone"`
	ProductLineCode string      `json:"productLineCode"`
	ProductTypeCode string      `json:"productTypeCode"`
	InstanceCount   json.Number `json:"instanceCount"`
	InstanceId      string      `json:"instanceId"`
	ItemList        []*Item     `json:"itemList"`
}

type Item struct {
	Code  string `json:"code"`
	Value string `json:"value"`
}

type OrderSend struct {
	UserId             string        `json:"userId"`
	ConsoleOrderFlowId string        `json:"consoleOrderFlowId"`
	OrderId            string        `json:"orderId"`
	ProductSetList     []*ProductSet `json:"productSetList"`
}

type ProductSet struct {
	ProductSetStatus string         `json:"productSetStatus"`
	ProductList      []*SendProduct `json:"productList"`
	Code             string         `json:"code"` // success全部成功、fail全部失败、partialSuccess部分成功
	Msg              string         `json:"msg"`
}

type SendProduct struct {
	Region          string  `json:"region"`
	AvailableZone   string  `json:"availableZone"`
	ProductLineCode string  `json:"productLineCode"`
	ProductTypeCode string  `json:"productTypeCode"`
	InstanceId      string  `json:"instanceId"`
	InstanceStatus  string  `json:"instanceStatus"` //产品实例的状态，各个业务线会不同，具体值以业务线为准，如available
	StatusTime      string  `json:"statusTime"`     // 实例创建的时间、实例的删除时间等 格式YYYYMMDD HH24MISS
	ItemList        []*Item `json:"itemList"`
}

type BillProduct struct {
	Region          string  `json:"region"`
	AvailableZone   string  `json:"availableZone"`
	ProductTypeCode string  `json:"productTypeCode"`
	InstanceId      string  `json:"instanceId"`
	InstanceName    string  `json:"instanceName"`
	ItemList        []*Item `json:"itemList"`
}

type BssOrder struct {
	Subpackage      bool           `json:"subpackage"`      // 是否分包 true 是 false 否 ，如果用户实例列表大于1000条，则需要分包处理
	PackageNo       int64          `json:"packageNo"`       // 包序号，如果不需要分包，则传1
	PackageCount    int64          `json:"packageCount"`    // 分包数，如果不需要分包，则传1
	BillCycle       string         `json:"billCycle"`       // 账期 20181121代表前一天（2018-11-20 00:00:00 ~ 2018-11-21 00:00:00之间）的计量数据
	SettleCycle     string         `json:"settleCycle"`     // 计费周期
	Count           int64          `json:"count"`           // 总条数
	Index           int64          `json:"index"`           // 当前序号
	UserId          string         `json:"userId"`          // 用户ID
	ProductLineCode string         `json:"productLineCode"` // 请按照实际产品线传入
	HaveOtherItem   bool           `json:"haveOtherItem"`   // 存在闲忙时时传入 true
	BillType        string         `json:"billType"`        // 计费类型
	ProductList     []*BillProduct `json:"productList"`
}

type Status struct {
	FlowId       string      `json:"flowId"`
	Region       string      `json:"region"`
	InstanceList []*Instance `json:"instanceList"`
}

type Instance struct {
	SubFlowId       string `json:"subFlowId"`       // BSS侧生成的子流水号
	OperateType     string `json:"operateType"`     // 操作类型 stopServer停服,delete删除,resumeServer重启
	ProductLineCode string `json:"productLineCode"` // 产品线编码
	ProductTypeCode string `json:"productTypeCode"` // 产品类型，如通用型云服务器
	InstanceId      string `json:"instanceId"`      // 实例ID
	Result          string `json:"result"`          // 操作结果，success成功，fail失败
	StatusTime      string `json:"statusTime"`      // 状态时间。如停服完成的时间
	InstanceStatus  string `json:"instanceStatus"`  // 控制台侧实例状态，以云服务器为例：ACTIVE运行中，DELETED为已删除，ERROR错误/创建失败，PAUSED暂停，SOFT_DELETED软删除，STOPPED停止，SHUTOFF已关机等
	UserId          string `json:"userId"`
	BillType        string `json:"billType"`
}
